<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        span {
            background: #ff8940;
            margin: 20px;
        }

    </style>
</head>
<body>
<span onclick="testSet()">testSet去重</span>
<span onclick="testObjectAssign()">testObjectAssign合并拷贝</span>
<span onclick="testMap()">testMap遍历</span>
<span onclick="testFilter()">testFilter遍历</span>
<span onclick="testSome()">testSome遍历</span>
<span onclick="testOperationalCharacter()">test运算符</span>
</body>

<script>
   /** 7. ~~运算符  在JavaScript中有按位取反的作用，~~即是取反两次，
    * 而位运算的操作值要求是整数，
    结果也是整数，所以经过位运算的都会自动变成整数，可以巧妙的去掉小数部分*/
    function testOperationalCharacter() {
       let a = 1.23;
       let b = -1.23;
//       let c = -2.23;
       console.log(~~a)
       console.log(~~b)
//       console.log(~c)
       // 8. ||运算符 巧妙的使用 || 运算符我们可以给变量设置默认值，比如：
       let c = 1;
       let d = c || 2; // 如果c的值为true则取存在的值，否则为2
       console.log(d); // 1
       //9. ...运算符 解构数组的方法，可以用于快速获取数组的参数
       let [num1, ...nums] = [1, 2, 3,2];
       console.log(num1); // 1
       console.log(nums); // [2, 3]
//       console.log(num3);
       //10. 三元运算符
       let e = true,
           f = '';

       if (e) {
           f = 'man';
       } else {
           f = 'woman';
       }
       // 等同于
       f = e? 'man':'woman'
    }
    
    /** some方法用于遍历数组，在每一项元素后面触发一个回调函数，
     * 只要一个满足条件就返回true，否则返回false，类似于 || 比较 */

    /** 6.every()
     every方法用于遍历数组，在每一项元素后面触发一个回调函数，
   只要一个不满足条件就返回false，否则返回true，类似于 && 比较：*/
    function testSome() {
        let arr5 = [{result: true}, {result: false}];
        let newArr5  = arr5.some((e, number) => e.result);
        console.log(newArr5); // true

        let arr4 = [1, 7, 3, 9, 5];
        let newArr4 = arr4.some((e, number) => e % 2===0);
        console.log(newArr4); // false

    }


    /**用于遍历数组 就是过滤数组，
     * 在每一项元素后面触发一个回调函数，
     * 通过判断，保留或移除当前项，最后返回一个新的数组*/
    function testFilter() {
        let arr4 = [1, 2, 3, 4, 5];
        let newArr4  = arr4.filter((t, number) => t % 2 === 0) // 取模，过滤余数不为0的数
        console.log(newArr4 )
    }

    /** map方法用于遍历数组，有返回值，
     * 可以对数组的每一项进行操作并生成一个新的数组，
     * 有些时候可以代替for和forEach循环 */
    function testMap() {
        let arr3 = [2, 5, 3, 4, 5];
        let map = arr3.map((e, number) => {
            console.log(e)
        });
        let map2 = arr3.map((e, number) => e * 10);
        console.log(map2)
    }

    /** 去重一个数组 */
    function testSet() {
        let arr = [1, 2, 2, 3];
        let set = new Set(arr);
        let from = Array.from(set);
        console.log('===' + from)
    }

    /** 可以用于对象的合并拷贝 */
    function testObjectAssign() {
        let obj1 = {a: 1};
        let obj2 = {b: 2};
        let obj3 = Object.assign({}, obj1, obj2);
        console.log('===' + JSON.stringify(obj3))
    }


</script>
</html>